//input 12 3 78 9 12 11 22
//output 11 12 78 3 12 22 -1 -1 -1 9 -1
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

typedef int DataType;
struct hashdata //hash表结构
{
    int num;//hash表长度
    DataType *element;
};

typedef struct hashdata *phash;
phash InitHashTable(int n)
{
    //请在此处填入代码， 初始化哈希表 注意初始化时，未装填数据哈希表填入-1
    /**********  Begin  *********/
    phash ha=new struct hashdata;//创建一个hash表
    ha->num=n;//赋值
    ha->element=(int *)malloc(sizeof(int)*n);//开辟空间
    for (int i = 0; i < n; ++i)
        ha->element[i]=-1;//初始赋值
    return ha;
    /**********  End  *********/
}

int hashFun(int data) //hash函数
{
    return data%11 ;
}

void InsertHash(phash H , int data)
{
    //请在此处填入代码，调用hashFun计算哈希地址，将数据data装填到哈希表中对应地址处，处理冲突的方法是线性探查法
    /**********  Begin  *********/
    int hash = hashFun(data);
    if (H->element[hash] == -1)
        H->element[hash] = data;
    else
        while (H->element[hash] != -1)
            if (H->element[++hash] == -1)
            {
                H->element[hash] = data;
                break;
            }

    /**********  End  *********/
}

void Print(phash H) //输出哈希表
{
    for(int i=0;i<H->num;i++)
    {
        cout<<H->element[i]<<" ";
    }
}

int main()
{
    phash H =InitHashTable(11) ; //初始化哈希表
    int d ;
    for(int i =0;i<7;i++) //输入7个元素，装填到哈希表中
    {
        cin>>d;
        InsertHash(H ,d);
    }
    Print(H) ; //输出哈希表
}
